package com.handler;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/** 此类没有实现,只是表示TypeHandler可以处理多个javaType时的写法.
 * 1.创建一个泛型类,E extends后面的类型的所有子类型都可以被此typeHandler处理
 * 2.构造函数添加一个参数,以便mybatis把要处理的实际参数类型传递到此typeHandler
 *
 * 比如你写一个这样的typeHandler类
 * class MyTypeHandler<E extends MyObject> 就表示MyTypeHandler这个类可以处理MyObject类型
 * 体系下的所有类型.
 *
 * 可以参考mybatis自带的2个处理枚举的typeHandler:EnumTypeHandler,EnumOrdinalTypeHandler
 * 这2个类都可以处理所有的枚举类型
 *
 * @author cj
 * @date 2019/10/15
 */
public class AllEnumTypeHandler<E extends Enum<E> > extends BaseTypeHandler<E> {
    private Class<E> type;

    public AllEnumTypeHandler(Class<E> type) {
        this.type = type;
    }

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, E parameter, JdbcType jdbcType) throws SQLException {
        System.out.println("---setNonNullParameter in AllEnumTypeHandler----");

    }

    @Override
    public E getNullableResult(ResultSet rs, String columnName) throws SQLException {
        System.out.println("---getNullableResult(rs,name) in AllEnumTypeHandler----");
        return null;

    }

    @Override
    public E getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        System.out.println("---getNullableResult(rs,index) in AllEnumTypeHandler----");
        return null;
    }

    @Override
    public E getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return null;
    }
}
